home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #9 / Amiga Plus CD - 2004 - No. 09.iso / amigaplus / tools / dev_libs / feelin040718 / sources / text / area.c next >
C/C++ Source or Header  |  2004-08-03  |  3KB  |  112 lines

  1. #include "Private.h"
  2.  
  3. /*** Methods ***************************************************************/
  4.  
  5. ///Text_Setup
  6. F_METHOD(LONG,Text_Setup)
  7. {
  8.    struct LocalObjectData *LOD = F_LOD(Class,Obj);
  9.  
  10.    if (F_SUPERDO())
  11.    {
  12.       STRPTR prep;
  13.  
  14.       LOD -> Prep[0] = (STRPTR) F_Do(_app,FM_Application_Resolve,LOD -> Prep[0],NULL);
  15.       LOD -> Prep[1] = (STRPTR) F_Do(_app,FM_Application_Resolve,LOD -> Prep[1],NULL);
  16.  
  17.       prep = LOD -> Prep[(FF_Area_Selected & _flags) ? 1 : 0];
  18.       if (!prep) prep = LOD -> Prep[0];
  19.  
  20.       LOD -> TextDisplay = F_NewObj(FC_TextDisplay,
  21.                                     FA_TextDisplay_PreParse,   prep,
  22.                                     FA_TextDisplay_Contents,   LOD -> Text,
  23.                                     FA_TextDisplay_Font,       _font,
  24.                                     FA_TextDisplay_Shortcut,   (0 != (FF_Text_Shortcut & LOD -> Flags)),
  25.                                     TAG_DONE);
  26.  
  27.       if (F_Do(LOD -> TextDisplay,FM_TextDisplay_Setup,_render))
  28.       {
  29.          F_Set(Obj,FA_ControlChar,F_Get(LOD -> TextDisplay,FA_TextDisplay_Shortcut));
  30.  
  31.          return TRUE;
  32.       }
  33.    }
  34.    return FALSE;
  35. }
  36. //+
  37. ///Text_Cleanup
  38. F_METHOD(ULONG,Text_Cleanup)
  39. {
  40.    struct LocalObjectData *LOD = F_LOD(Class,Obj);
  41.  
  42.    if (_render)
  43.    {
  44.       F_Do(LOD -> TextDisplay,FM_TextDisplay_Cleanup,_render);
  45.       F_DisposeObj(LOD -> TextDisplay); LOD -> TextDisplay = NULL;
  46.    }
  47.  
  48.    return F_SUPERDO();
  49. }
  50. //+
  51. ///Text_AskMinMax
  52. F_METHOD(ULONG,Text_AskMinMax)
  53. {
  54.    struct LocalObjectData *LOD = F_LOD(Class,Obj);
  55.  
  56. //   F_Set(LOD -> TextDisplay,FA_NTextDisplay_Font,(ULONG)(_font));
  57.  
  58.    if (LOD -> Text)
  59.    {
  60.       if (FF_Area_SetMinW & _flags) _minw += F_Get(LOD -> TextDisplay,FA_TextDisplay_Width);
  61.       if (FF_Area_SetMinH & _flags) _minh += F_Get(LOD -> TextDisplay,FA_TextDisplay_Height);
  62.    }
  63.    else
  64.    {
  65.       _minh += _font -> tf_YSize;
  66.    }
  67.  
  68.    return F_SUPERDO();
  69. }
  70. //+
  71. ///Text_Draw
  72. F_METHODM(void,Text_Draw,FS_Draw)
  73. {
  74.    struct LocalObjectData *LOD = F_LOD(Class,Obj);
  75.    FRect rect;
  76.  
  77.    F_SUPERDO();
  78.  
  79.    rect.x1 = _mx; rect.x2 = rect.x1 + _mw - 1;
  80.    rect.y1 = _my; rect.y2 = rect.y1 + _mh - 1;
  81.  
  82.    if (FF_Draw_Update & Msg -> Flags)
  83.    {
  84.       F_Do(Obj,FM_Erase,&rect,0);
  85.    }
  86.  
  87.    if (FF_Text_VCenter & LOD -> Flags)
  88.    {
  89.       UWORD h = rect.y2 - rect.y1 + 1;
  90.       UWORD td_h = F_Get(LOD -> TextDisplay,FA_TextDisplay_Height);
  91.  
  92.       if (td_h < h)
  93.       {
  94.          rect.y1 = (h - td_h) / 2 + rect.y1;
  95.       }
  96.    }
  97.  
  98.    if (FF_Text_HCenter & LOD -> Flags)
  99.    {
  100.       UWORD w = rect.x2 - rect.x1 + 1;
  101.       UWORD td_w = F_Get(LOD -> TextDisplay,FA_TextDisplay_Width);
  102.  
  103.       if (td_w < w)
  104.       {
  105.          rect.x1 = (w - td_w) / 2 + rect.x1;
  106.       }
  107.    }
  108.  
  109.    F_Do(LOD -> TextDisplay,FM_TextDisplay_Draw,&rect);
  110. }
  111. //+
  112.